package br.com.abelha.manager.db;

import java.util.ArrayList;
import java.util.List;

import android.content.Context;
import android.database.Cursor;
import android.util.Log;
import br.com.abelha.manager.entity.Pessoa;

/**
 * @author dalsonsouza
 * @author dalsonsouza
 */

public class DAOPessoa {
	
	private DBAdapter dbAdapter;
	
	public DAOPessoa(Context context) {
		dbAdapter = new DBAdapter(context).open();
	}
	
	public long insert(Pessoa pessoa) throws Throwable {
		
		long id = 0;
		try {
			dbAdapter.beginTransaction();
		
			Object[] contents = new Object[]
			        {Pessoa.ID, null,
					Pessoa.NOME_COMPLETO, pessoa.getNome_completo(),
					Pessoa.DATA_NASC, pessoa.getData_nasc(),
					Pessoa.SEXO, pessoa.getSexo(),
					Pessoa.ALFABETIZADO, pessoa.getAlfabetizado(),
					Pessoa.ID_OCUPACAO, pessoa.getId_ocupacao(),
					Pessoa.OCUPACAO, pessoa.getOcupacao(),
					Pessoa.FREQUENTA_ESCOLA, pessoa.getFrequenta_escola(),
					Pessoa.NOME_MAE, pessoa.getNome_mae(),
					Pessoa.NUMERO, pessoa.getNumero(),
					Pessoa.COMPLEMENTO, pessoa.getComplemento(),
					Pessoa.TELEFONE1, pessoa.getTelefone1(),
					Pessoa.TELEFONE2, pessoa.getTelefone2(),
					Pessoa.TELEFONE3, pessoa.getTelefone3(),
					Pessoa.ID_FICHA_A, pessoa.getId_fichaA(),
					Pessoa.RACA, pessoa.getRaca(),
					Pessoa.FICHA_GESTANTE, pessoa.getFichaBGestante(),
					Pessoa.FICHA_HIPERTENSO, pessoa.getFichaBHipertenso(),
					Pessoa.FICHA_HANSENIASE, pessoa.getFichaBHanseniase(),
					Pessoa.FICHA_DIABETE, pessoa.getFichaBDiabete(),
					Pessoa.FICHA_TUBERCULOSE, pessoa.getFichaBTuberculose(),
					Pessoa.FICHA_CRIANCA, pessoa.getFichaCCrianca(),
					Pessoa.FICHA_INTERNACAO, pessoa.getFichaBInternacao(),				
					Pessoa.FICHA_OBITO, pessoa.getFichaBObito(),
					Pessoa.DEF_FISICA,pessoa.getDef_fisica(),					
					Pessoa.DEF_MENTAL,pessoa.getDef_fisica(),
					Pessoa.ESCOLARIDADE,pessoa.getDef_mental(),
					Pessoa.ALCOOLISMO,pessoa.getAlcoolismo(),
					Pessoa.CHAGAS,pessoa.getChagas(),
					Pessoa.EPILEPSIA,pessoa.getEpilepsia(),
					Pessoa.MALARIA,pessoa.getMalaria()};
								
			
			id = dbAdapter.insert(pessoa.getTableName(), contents);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public int update(Pessoa pessoa) throws Throwable {
		
		int id = 0;
		try {
			dbAdapter.beginTransaction();
			
			String[] whereArgs = new String[]{String.valueOf(pessoa.getId())};
		
			Object[] contents = new Object[]
					{Pessoa.ID, null,
					Pessoa.NOME_COMPLETO, pessoa.getNome_completo(),
					Pessoa.DATA_NASC, pessoa.getData_nasc(),
					Pessoa.SEXO, pessoa.getSexo(),
					Pessoa.ALFABETIZADO, pessoa.getAlfabetizado(),
					Pessoa.ID_OCUPACAO, pessoa.getId_ocupacao(),
					Pessoa.OCUPACAO, pessoa.getOcupacao(),
					Pessoa.FREQUENTA_ESCOLA, pessoa.getFrequenta_escola(),
					Pessoa.NOME_MAE, pessoa.getNome_mae(),
					Pessoa.NUMERO, pessoa.getNumero(),
					Pessoa.COMPLEMENTO, pessoa.getComplemento(),
					Pessoa.TELEFONE1, pessoa.getTelefone1(),
					Pessoa.TELEFONE2, pessoa.getTelefone2(),
					Pessoa.TELEFONE3, pessoa.getTelefone3(),
					Pessoa.ID_FICHA_A, pessoa.getId_fichaA(),
					Pessoa.RACA, pessoa.getRaca(),
					Pessoa.FICHA_GESTANTE, pessoa.getFichaBGestante(),
					Pessoa.FICHA_HIPERTENSO, pessoa.getFichaBHipertenso(),
					Pessoa.FICHA_HANSENIASE, pessoa.getFichaBHanseniase(),
					Pessoa.FICHA_DIABETE, pessoa.getFichaBDiabete(),
					Pessoa.FICHA_TUBERCULOSE, pessoa.getFichaBTuberculose(),
					Pessoa.FICHA_CRIANCA, pessoa.getFichaCCrianca(),					
					Pessoa.FICHA_OBITO, pessoa.getFichaBObito(),
					Pessoa.FICHA_INTERNACAO, pessoa.getFichaBInternacao(),
					Pessoa.DEF_FISICA,pessoa.getDef_fisica(),					
					Pessoa.DEF_MENTAL,pessoa.getDef_fisica(),
					Pessoa.ESCOLARIDADE,pessoa.getDef_mental(),
					Pessoa.ALCOOLISMO,pessoa.getAlcoolismo(),
					Pessoa.CHAGAS,pessoa.getChagas(),
					Pessoa.EPILEPSIA,pessoa.getEpilepsia(),
					Pessoa.MALARIA,pessoa.getMalaria()};
			
			id = dbAdapter.update(pessoa.getTableName(), Pessoa.ID + "=?", whereArgs, contents);
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public int delete(Integer id, boolean deleteByFichaA) throws Throwable {
		
		try {
			dbAdapter.beginTransaction();
			Pessoa pessoa = new Pessoa();
			
			if(deleteByFichaA){
				String[] whereArgs = new String[]{String.valueOf(id)};
				id = dbAdapter.delete(pessoa.getTableName(), Pessoa.ID_FICHA_A + "=?", whereArgs);
				
			}else{
				pessoa.setId(id);
				String[] whereArgs = new String[]{String.valueOf(pessoa.getId())};
				id = dbAdapter.delete(pessoa.getTableName(), Pessoa.ID + "=?", whereArgs);
				
			}
			
			dbAdapter.setTransactionSuccessful();
		} catch (Throwable e) {
			Log.e(this.getClass().getName(), "Error", e);
			throw e;
		} finally {
			dbAdapter.endTransaction();
		}
		
		return id;
	}
	
	public List<Pessoa> getPessoas(Long idFichaA){
		List<Pessoa> lAux = new ArrayList<Pessoa>();
		String[] selectionArgs = new String[]{String.valueOf(idFichaA)};
		String[] columns = new String[]{Pessoa.NOME_COMPLETO,Pessoa.DATA_NASC,Pessoa.SEXO,
				Pessoa.ALFABETIZADO,Pessoa.OCUPACAO,Pessoa.ID_OCUPACAO,Pessoa.ID_FICHA_A,
				Pessoa.FREQUENTA_ESCOLA,Pessoa.NOME_MAE,Pessoa.NUMERO,
				Pessoa.COMPLEMENTO,Pessoa.TELEFONE1,Pessoa.TELEFONE2,Pessoa.TELEFONE3,Pessoa.RACA,
				Pessoa.FICHA_GESTANTE,Pessoa.FICHA_HIPERTENSO,Pessoa.FICHA_HANSENIASE,Pessoa.FICHA_DIABETE,
				Pessoa.FICHA_TUBERCULOSE,Pessoa.FICHA_CRIANCA,Pessoa.FICHA_INTERNACAO,Pessoa.FICHA_OBITO,
				Pessoa.DEF_FISICA,Pessoa.DEF_MENTAL,Pessoa.ESCOLARIDADE,Pessoa.ALCOOLISMO,Pessoa.CHAGAS,
				Pessoa.EPILEPSIA,Pessoa.MALARIA};													
				
		Pessoa pessoa = new Pessoa();
		Cursor cursor = null;
		
		try {
			cursor = dbAdapter.query(pessoa.getTableName(), 
					columns, 
					Pessoa.ID_FICHA_A + " = ?", 
					selectionArgs, 
					null, 
					null);

			cursor.moveToFirst();
				
			do{
				String nome_completo = cursor.getString(cursor.getColumnIndex(Pessoa.NOME_COMPLETO));
				String data_nasc = cursor.getString(cursor.getColumnIndex(Pessoa.DATA_NASC));
				String sexo = cursor.getString(cursor.getColumnIndex(Pessoa.SEXO));
				String alfabetizado = cursor.getString(cursor.getColumnIndex(Pessoa.ALFABETIZADO));
				String ocupacao = cursor.getString(cursor.getColumnIndex(Pessoa.OCUPACAO));
				Integer id_ocupacao = cursor.getInt(cursor.getColumnIndex(Pessoa.ID_OCUPACAO));
				Integer id_fichaA = cursor.getInt(cursor.getColumnIndex(Pessoa.ID_FICHA_A));
				String frequenta_escola = cursor.getString(cursor.getColumnIndex(Pessoa.FREQUENTA_ESCOLA));
				String nome_mae = cursor.getString(cursor.getColumnIndex(Pessoa.NOME_MAE));
				String numero = cursor.getString(cursor.getColumnIndex(Pessoa.NUMERO));
				String complemento = cursor.getString(cursor.getColumnIndex(Pessoa.COMPLEMENTO));
				String telefone1 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE1));
				String telefone2 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE2));
				String telefone3 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE3));
				Integer raca = cursor.getInt(cursor.getColumnIndex(Pessoa.RACA));
				
				Integer fichaBGestante = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_GESTANTE));
				Integer fichaBHipertenso = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_HIPERTENSO));
				Integer fichaBHanseniase = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_HANSENIASE));
				Integer fichaBDiabete = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_DIABETE));
				Integer fichaBTuberculose = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_TUBERCULOSE));
				Integer fichaCCrianca = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_CRIANCA));
				Integer fichaBInternacao = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_INTERNACAO));
				Integer fichaBObito = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_OBITO));
				
				Integer def_fisica = cursor.getInt(cursor.getColumnIndex(Pessoa.DEF_FISICA));
				Integer def_mental = cursor.getInt(cursor.getColumnIndex(Pessoa.DEF_MENTAL));
				Integer escolaridade = cursor.getInt(cursor.getColumnIndex(Pessoa.ESCOLARIDADE));
				Integer alcoolismo = cursor.getInt(cursor.getColumnIndex(Pessoa.ALCOOLISMO));
				Integer chagas = cursor.getInt(cursor.getColumnIndex(Pessoa.CHAGAS));
				Integer epilepsia = cursor.getInt(cursor.getColumnIndex(Pessoa.EPILEPSIA));
				Integer malaria = cursor.getInt(cursor.getColumnIndex(Pessoa.MALARIA));
						
				pessoa.setId(id_fichaA);
				pessoa.setNome_completo(nome_completo);
				pessoa.setData_nasc(data_nasc);
				pessoa.setSexo(sexo);
				pessoa.setAlfabetizado(alfabetizado);
				pessoa.setId_ocupacao(id_ocupacao);
				pessoa.setFrequenta_escola(frequenta_escola);
				pessoa.setNome_mae(nome_mae);
				pessoa.setNumero(numero);
				pessoa.setComplemento(complemento);
				pessoa.setTelefone1(telefone1);
				pessoa.setTelefone1(telefone2);
				pessoa.setTelefone1(telefone3);
				pessoa.setRaca(raca);
				pessoa.setOcupacao(ocupacao);
				pessoa.setId_fichaA(id_fichaA);
				
				pessoa.setFichaBGestante(fichaBGestante);
				pessoa.setFichaBHipertenso(fichaBHipertenso);
				pessoa.setFichaBHanseniase(fichaBHanseniase);
				pessoa.setFichaBDiabete(fichaBDiabete);
				pessoa.setFichaBTuberculose(fichaBTuberculose);
				pessoa.setFichaCCrianca(fichaCCrianca);
				pessoa.setFichaBInternacao(fichaBInternacao);
				pessoa.setFichaBObito(fichaBObito);
				pessoa.setDef_fisica(def_fisica);
				pessoa.setDef_mental(def_mental);
				pessoa.setEscolaridade(escolaridade);
				pessoa.setAlcoolismo(alcoolismo);
				pessoa.setChagas(chagas);
				pessoa.setEpilepsia(epilepsia);
				pessoa.setMalaria(malaria);
								
				
				lAux.add(pessoa);
				pessoa = new Pessoa();
				
			}while(cursor.moveToNext());
			
		} catch (Exception e) {
			e.printStackTrace();
		} finally{
			if(!cursor.isClosed()) cursor.close();
		}
		
		return lAux;
		
		
	}
	
	public Pessoa get(Integer id) {
		Pessoa pessoa = new Pessoa();
		String[] selectionArgs = new String[]{String.valueOf(id)};
		Cursor cursor = dbAdapter.query(pessoa.getTableName(), 
					null , 
					Pessoa.ID + "=?", 
					selectionArgs, 
					null, 
					null);
	
		
		if(cursor == null) {
			pessoa = null;
			
		} else {
			if(cursor.moveToFirst()) {
				String nome_completo = cursor.getString(cursor.getColumnIndex(Pessoa.NOME_COMPLETO));
				String data_nasc = cursor.getString(cursor.getColumnIndex(Pessoa.DATA_NASC));
				String sexo = cursor.getString(cursor.getColumnIndex(Pessoa.SEXO));
				String alfabetizado = cursor.getString(cursor.getColumnIndex(Pessoa.ALFABETIZADO));
				String ocupacao = cursor.getString(cursor.getColumnIndex(Pessoa.OCUPACAO));
				Integer id_ocupacao = cursor.getInt(cursor.getColumnIndex(Pessoa.ID_OCUPACAO));
				Integer id_fichaA = cursor.getInt(cursor.getColumnIndex(Pessoa.ID_FICHA_A));
				String frequenta_escola = cursor.getString(cursor.getColumnIndex(Pessoa.FREQUENTA_ESCOLA));
				String nome_mae = cursor.getString(cursor.getColumnIndex(Pessoa.NOME_MAE));
				String numero = cursor.getString(cursor.getColumnIndex(Pessoa.NUMERO));
				String complemento = cursor.getString(cursor.getColumnIndex(Pessoa.COMPLEMENTO));
				String telefone1 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE1));
				String telefone2 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE2));
				String telefone3 = cursor.getString(cursor.getColumnIndex(Pessoa.TELEFONE3));
				Integer raca = cursor.getInt(cursor.getColumnIndex(Pessoa.RACA));
				
				Integer fichaBGestante = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_GESTANTE));
				Integer fichaBHipertenso = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_HIPERTENSO));
				Integer fichaBHanseniase = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_HANSENIASE));
				Integer fichaBDiabete = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_DIABETE));
				Integer fichaBTuberculose = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_TUBERCULOSE));
				Integer fichaCCrianca = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_CRIANCA));
				Integer fichaBInternacao = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_INTERNACAO));
				Integer fichaBObito = cursor.getInt(cursor.getColumnIndex(Pessoa.FICHA_OBITO));
				
				Integer def_fisica = cursor.getInt(cursor.getColumnIndex(Pessoa.DEF_FISICA));
				Integer def_mental = cursor.getInt(cursor.getColumnIndex(Pessoa.DEF_MENTAL));
				Integer escolaridade = cursor.getInt(cursor.getColumnIndex(Pessoa.ESCOLARIDADE));
				Integer alcoolismo = cursor.getInt(cursor.getColumnIndex(Pessoa.ALCOOLISMO));
				Integer chagas = cursor.getInt(cursor.getColumnIndex(Pessoa.CHAGAS));
				Integer epilepsia = cursor.getInt(cursor.getColumnIndex(Pessoa.EPILEPSIA));
				Integer malaria = cursor.getInt(cursor.getColumnIndex(Pessoa.MALARIA));

				
				pessoa.setId(id);
				pessoa.setNome_completo(nome_completo);
				pessoa.setData_nasc(data_nasc);
				pessoa.setSexo(sexo);
				pessoa.setAlfabetizado(alfabetizado);
				pessoa.setId_ocupacao(id_ocupacao);
				pessoa.setFrequenta_escola(frequenta_escola);
				pessoa.setNome_mae(nome_mae);
				pessoa.setNumero(numero);
				pessoa.setComplemento(complemento);
				pessoa.setTelefone1(telefone1);
				pessoa.setTelefone1(telefone2);
				pessoa.setTelefone1(telefone3);
				pessoa.setRaca(raca);
				pessoa.setOcupacao(ocupacao);
				pessoa.setId_fichaA(id_fichaA);
				
				pessoa.setFichaBGestante(fichaBGestante);
				pessoa.setFichaBHipertenso(fichaBHipertenso);
				pessoa.setFichaBHanseniase(fichaBHanseniase);
				pessoa.setFichaBDiabete(fichaBDiabete);
				pessoa.setFichaBTuberculose(fichaBTuberculose);
				pessoa.setFichaCCrianca(fichaCCrianca);
				pessoa.setFichaBInternacao(fichaBInternacao);
				pessoa.setFichaBObito(fichaBObito);

				pessoa.setDef_fisica(def_fisica);
				pessoa.setDef_mental(def_mental);
				pessoa.setEscolaridade(escolaridade);
				pessoa.setAlcoolismo(alcoolismo);
				pessoa.setChagas(chagas);
				pessoa.setEpilepsia(epilepsia);
				pessoa.setMalaria(malaria);
				
			}
			
			if(!cursor.isClosed()) cursor.close();
		}
		
		return pessoa;
	}
	
	public Cursor getCursor(String selection, String[] selectionArgs) {
		Pessoa pessoa = new Pessoa();
		Cursor cursor = dbAdapter.query(pessoa.getTableName(), 
						null , 
						selection, 
						selectionArgs, 
						null, 
						null);
		
		return cursor;
	}

	public Cursor listarPessoasPorFichaA(Long idFichaA) {
		
		String selection = Pessoa.ID_FICHA_A + " = ? ";
		String[] selectionArgs = new String[]{String.valueOf(idFichaA)};
		
		return getCursor(selection, selectionArgs);
		
	}
	
}
